Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

429
Views
¿Por qué el producto "INT_MAX * INT_MAX" da 1?

Estaba aprendiendo arquitectura de computadoras y decidí experimentar con el desbordamiento de la multiplicación. Se observa un desbordamiento para INT_MAX * INT_MAX , pero no estoy seguro de por qué esto da el producto 1 en C/C++.

 #include <stdio.h> #include <limits.h> int main() { int num = INT_MAX; printf("%0x\n", num); //stdout is 0x7fffffff printf("%d\n", num * num); //stdout is 1 return 0; }
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Nota: su código no es válido. El desbordamiento de int * int es un comportamiento indefinido y no debe escribir dicho código. El resultado será impredecible. Este es un ejemplo de juguete en el que un compilador elige actuar de una manera específica, pero en general, el compilador puede hacer cualquier cosa con su código. Si desea que se defina el desbordamiento firmado, consulte, por ejemplo, ¿El desbordamiento firmado sigue siendo un comportamiento indefinido en gcc cuando se usa -fwrapv? .


Por ejemplo, supongamos que int en su plataforma tiene 32 bits y es complemento a dos . El resultado se calcula y luego se trunca a 32 bits.

 INT_MAX = 0x7fffffff = 2147483647 2147483647 * 2147483647 = 4611686014132420609 4611686014132420609 = 0x3fffffff00000001 32-bits from 0x3fffffff00000001 = 0x00000001 = 1
over 4 years ago · Santiago Trujillo Report

0

En diferentes máquinas, el tamaño del tipo de datos "int" puede ser diferente. Puede ser de 32 bits o de 64 bits, según el equipo que utilice. Los rangos típicos de "int" para programas de 32 bits son de -2^31 (mínimo) a 2^31-1 (máximo). Los rangos típicos de "int" para programas de 64 bits son de -2^63 (mínimo) a 2^63-1 (máximo).

Si su programa es de 32 bits, el resultado es (2^31-1) (2^31-1) = 2^62-2^32+1. Dado que 2^62-2^32 solo se representará en los 32 bits superiores del resultado binario, el resultado de desbordamiento que obtendrá es 1. De lo contrario, si su programa es de 64 bits, entonces (2^63-1) (2^ 63-1) = 2^126-2^64+1 también conducirá al mismo resultado al truncar los 64 bits superiores.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!